xentrace: Remove redundant tb_done_init checks, and add missing ones.
authorKeir Fraser <keir.fraser@citrix.com>
Mon, 11 Feb 2008 09:47:19 +0000 (09:47 +0000)
committerKeir Fraser <keir.fraser@citrix.com>
Mon, 11 Feb 2008 09:47:19 +0000 (09:47 +0000)
Hand inspection of gcc -02 output confirms significantly shorter
codepaths for inactive (i.e. normal case) tracing.

Signed-off-by: Michael A Fetterman <Michael.Fetterman@cl.cam.ac.uk>
xen/arch/x86/trace.c
xen/include/asm-x86/hvm/trace.h
xen/include/asm-x86/trace.h
xen/include/xen/trace.h

index ddb32202bd8ff76b5dcd84de71c5fd3ce2878a39..65e66a3280294392e4f1d4a03efc871075fea8cc 100644 (file)
@@ -15,9 +15,6 @@ asmlinkage void trace_hypercall(void)
 {
     struct cpu_user_regs *regs = guest_cpu_user_regs();
 
-    if ( !tb_init_done )
-        return;
-
 #ifdef __x86_64__
     if ( is_pv_32on64_vcpu(current) )
     {
@@ -52,9 +49,6 @@ asmlinkage void trace_hypercall(void)
 void __trace_pv_trap(int trapnr, unsigned long eip,
                      int use_error_code, unsigned error_code)
 {
-    if ( !tb_init_done )
-        return;
-
 #ifdef __x86_64__
     if ( is_pv_32on64_vcpu(current) )
     {
@@ -99,9 +93,6 @@ void __trace_pv_page_fault(unsigned long addr, unsigned error_code)
 {
     unsigned long eip = guest_cpu_user_regs()->eip;
 
-    if ( !tb_init_done )
-        return;
-
 #ifdef __x86_64__
     if ( is_pv_32on64_vcpu(current) )
     {
@@ -135,9 +126,6 @@ void __trace_pv_page_fault(unsigned long addr, unsigned error_code)
 
 void __trace_trap_one_addr(unsigned event, unsigned long va)
 {
-    if ( !tb_init_done )
-        return;
-
 #ifdef __x86_64__
     if ( is_pv_32on64_vcpu(current) )
     {
@@ -155,9 +143,6 @@ void __trace_trap_one_addr(unsigned event, unsigned long va)
 void __trace_trap_two_addr(unsigned event, unsigned long va1,
                            unsigned long va2)
 {
-    if ( !tb_init_done )
-        return;
-
 #ifdef __x86_64__
     if ( is_pv_32on64_vcpu(current) )
     {
@@ -185,9 +170,6 @@ void __trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte)
 {
     unsigned long eip = guest_cpu_user_regs()->eip;
 
-    if ( !tb_init_done )
-        return;
-
     /* We have a couple of different modes to worry about:
      * - 32-on-32: 32-bit pte, 32-bit virtual addresses
      * - pae-on-pae, pae-on-64: 64-bit pte, 32-bit virtual addresses
index 54c578f912a9a399ae66d5b74bba0e82ffd3bdec..04f90e0f9879ca08e938657a1eb42ec5a6fa6c16 100644 (file)
@@ -37,6 +37,9 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
                                    unsigned long rip,
                                    unsigned long exit_reason)
 {
+    if ( likely(!tb_init_done) )
+        return;
+
 #ifdef __x86_64__
     if(hvm_long_mode_enabled(v))
     {
@@ -50,7 +53,7 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
         d.vid = v->vcpu_id;
         d.exit_reason = exit_reason;
         d.rip = rip;
-        trace_var(TRC_HVM_VMEXIT64, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+        __trace_var(TRC_HVM_VMEXIT64, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
     } else {
 #endif
         struct {
@@ -63,7 +66,7 @@ static inline void hvmtrace_vmexit(struct vcpu *v,
         d.vid = v->vcpu_id;
         d.exit_reason = exit_reason;
         d.eip = rip;
-        trace_var(TRC_HVM_VMEXIT, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+        __trace_var(TRC_HVM_VMEXIT, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
 #ifdef __x86_64__
     }
 #endif
@@ -75,9 +78,13 @@ static inline void hvmtrace_vmentry(struct vcpu *v)
     struct {
         unsigned did:16, vid:16;
     } d;
+
+    if ( likely(!tb_init_done) )
+        return;
+
     d.did = v->domain->domain_id;
     d.vid = v->vcpu_id;
-    trace_var(TRC_HVM_VMENTRY, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
+    __trace_var(TRC_HVM_VMENTRY, 1/*cycles*/, sizeof(d), (unsigned char *)&d);
 }
 
 static inline void hvmtrace_msr_read(struct vcpu *v, u32 ecx, u64 msr_content)
@@ -87,11 +94,15 @@ static inline void hvmtrace_msr_read(struct vcpu *v, u32 ecx, u64 msr_content)
         u32 ecx;
         u64 msr_content;
     } d;
+
+    if ( likely(!tb_init_done) )
+        return;
+
     d.did = v->domain->domain_id;
     d.vid = v->vcpu_id;
     d.ecx = ecx;
     d.msr_content = msr_content;
-    trace_var(TRC_HVM_MSR_READ, 0/*!cycles*/, sizeof(d), (unsigned char *)&d);
+    __trace_var(TRC_HVM_MSR_READ, 0/*!cycles*/, sizeof(d), (unsigned char *)&d);
 }
 
 static inline void hvmtrace_msr_write(struct vcpu *v, u32 ecx, u64 msr_content)
@@ -101,16 +112,23 @@ static inline void hvmtrace_msr_write(struct vcpu *v, u32 ecx, u64 msr_content)
         u32 ecx;
         u64 msr_content;
     } d;
+
+    if ( likely(!tb_init_done) )
+        return;
+
     d.did = v->domain->domain_id;
     d.vid = v->vcpu_id;
     d.ecx = ecx;
     d.msr_content = msr_content;
-    trace_var(TRC_HVM_MSR_WRITE, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
+    __trace_var(TRC_HVM_MSR_WRITE, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
 }
 
 static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
                                    u32 error_code)
 {
+    if ( likely(!tb_init_done) )
+        return;
+
 #ifdef __x86_64__
     if(hvm_long_mode_enabled(v))
     {
@@ -123,8 +141,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
         d.vid = v->vcpu_id;
         d.error_code = error_code;
         d.va = va;
-        trace_var(TRC_HVM_PF_XEN64, 0/*!cycles*/,sizeof(d),
-                  (unsigned char *)&d);
+        __trace_var(TRC_HVM_PF_XEN64, 0/*!cycles*/,sizeof(d),
+                    (unsigned char *)&d);
     } else {
 #endif
         struct {
@@ -136,7 +154,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
         d.vid = v->vcpu_id;
         d.error_code = error_code;
         d.va = va;
-        trace_var(TRC_HVM_PF_XEN, 0/*!cycles*/,sizeof(d), (unsigned char *)&d);
+        __trace_var(TRC_HVM_PF_XEN, 0/*!cycles*/,sizeof(d),
+                    (unsigned char *)&d);
 #ifdef __x86_64__
     }
 #endif
@@ -144,7 +163,7 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
 
 #define HVMTRACE_ND(evt, vcpu, count, d1, d2, d3, d4)                   \
     do {                                                                \
-        if (DO_TRC_HVM_ ## evt)                                         \
+        if ( unlikely(tb_init_done) && DO_TRC_HVM_ ## evt )             \
         {                                                               \
             struct {                                                    \
                 unsigned did:16, vid:16;                                \
@@ -156,8 +175,8 @@ static inline void hvmtrace_pf_xen(struct vcpu *v, unsigned long va,
             _d.d[1]=(d2);                                               \
             _d.d[2]=(d3);                                               \
             _d.d[3]=(d4);                                               \
-            trace_var(TRC_HVM_ ## evt, 0/*!cycles*/,                    \
-                      sizeof(u32)*count+1, (unsigned char *)&_d);       \
+            __trace_var(TRC_HVM_ ## evt, 0/*!cycles*/,                  \
+                        sizeof(u32)*count+1, (unsigned char *)&_d);     \
         }                                                               \
     } while(0)
 
index c8b13c4b86a33f3d2a86bcbce89176019f11e766..e65b5de6eec43d336f7117a14b76150652b6b286 100644 (file)
@@ -8,7 +8,7 @@ void __trace_pv_trap(int trapnr, unsigned long eip,
 static inline void trace_pv_trap(int trapnr, unsigned long eip,
                                  int use_error_code, unsigned error_code)
 {
-    if ( tb_init_done )
+    if ( unlikely(tb_init_done) )
         __trace_pv_trap(trapnr, eip, use_error_code, error_code);
 }
 
@@ -16,14 +16,14 @@ void __trace_pv_page_fault(unsigned long addr, unsigned error_code);
 static inline void trace_pv_page_fault(unsigned long addr,
                                        unsigned error_code)
 {
-    if ( tb_init_done )
+    if ( unlikely(tb_init_done) )
         __trace_pv_page_fault(addr, error_code);
 }
 
 void __trace_trap_one_addr(unsigned event, unsigned long va);
 static inline void trace_trap_one_addr(unsigned event, unsigned long va)
 {
-    if ( tb_init_done )
+    if ( unlikely(tb_init_done) )
         __trace_trap_one_addr(event, va);
 }
 
@@ -32,14 +32,14 @@ void __trace_trap_two_addr(unsigned event, unsigned long va1,
 static inline void trace_trap_two_addr(unsigned event, unsigned long va1,
                                        unsigned long va2)
 {
-    if ( tb_init_done )
+    if ( unlikely(tb_init_done) )
         __trace_trap_two_addr(event, va1, va2);
 }
 
 void __trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte);
 static inline void trace_ptwr_emulation(unsigned long addr, l1_pgentry_t npte)
 {
-    if ( tb_init_done )
+    if ( unlikely(tb_init_done) )
         __trace_ptwr_emulation(addr, npte);
 }
 
index 7635f2dbf604368c482728d0c49a5ea068bd3f3e..c5ce88f7cae14310dfcd2a3cd1f9582b9a845805 100644 (file)
@@ -39,7 +39,7 @@ void __trace_var(u32 event, int cycles, int extra, unsigned char *extra_data);
 static inline void trace_var(u32 event, int cycles, int extra,
                                unsigned char *extra_data)
 {
-    if( unlikely(tb_init_done) )
+    if ( unlikely(tb_init_done) )
         __trace_var(event, cycles, extra, extra_data);
 }
 
@@ -49,49 +49,64 @@ static inline void trace_var(u32 event, int cycles, int extra,
         trace_var(_e, 1, 0, NULL);              \
     } while ( 0 )
   
-#define TRACE_1D(_e,_d)                                         \
+#define TRACE_1D(_e,d1)                                         \
     do {                                                        \
-        u32 _d1;                                                \
-        _d1 = _d;                                               \
-        trace_var(_e, 1, sizeof(_d1), (unsigned char *)&_d1);  \
+        if ( unlikely(tb_init_done) )                           \
+        {                                                       \
+            u32 _d[1];                                          \
+            _d[0] = d1;                                         \
+            __trace_var(_e, 1, sizeof(*_d), (unsigned char *)_d); \
+        }                                                       \
     } while ( 0 )
  
 #define TRACE_2D(_e,d1,d2)                                      \
-    do {                                                       \
-        u32 _d[2];                                             \
-        _d[0]=d1;                                              \
-        _d[1]=d2;                                              \
-        trace_var(_e, 1, sizeof(*_d)*2, (unsigned char *)_d);  \
+    do {                                                        \
+        if ( unlikely(tb_init_done) )                           \
+        {                                                       \
+            u32 _d[2];                                          \
+            _d[0] = d1;                                         \
+            _d[1] = d2;                                         \
+            __trace_var(_e, 1, sizeof(*_d)*2, (unsigned char *)_d); \
+        }                                                       \
     } while ( 0 )
  
 #define TRACE_3D(_e,d1,d2,d3)                                   \
     do {                                                        \
-        u32 _d[3];                                              \
-        _d[0]=d1;                                               \
-        _d[1]=d2;                                               \
-        _d[2]=d3;                                               \
-        trace_var(_e, 1, sizeof(*_d)*3, (unsigned char *)_d);  \
+        if ( unlikely(tb_init_done) )                           \
+        {                                                       \
+            u32 _d[3];                                          \
+            _d[0] = d1;                                         \
+            _d[1] = d2;                                         \
+            _d[2] = d3;                                         \
+            __trace_var(_e, 1, sizeof(*_d)*3, (unsigned char *)_d); \
+        }                                                       \
     } while ( 0 )
  
 #define TRACE_4D(_e,d1,d2,d3,d4)                                \
     do {                                                        \
-        u32 _d[4];                                              \
-        _d[0]=d1;                                               \
-        _d[1]=d2;                                               \
-        _d[2]=d3;                                               \
-        _d[3]=d4;                                               \
-        trace_var(_e, 1, sizeof(*_d)*4, (unsigned char *)_d);  \
+        if ( unlikely(tb_init_done) )                           \
+        {                                                       \
+            u32 _d[4];                                          \
+            _d[0] = d1;                                         \
+            _d[1] = d2;                                         \
+            _d[2] = d3;                                         \
+            _d[3] = d4;                                         \
+            __trace_var(_e, 1, sizeof(*_d)*4, (unsigned char *)_d); \
+        }                                                       \
     } while ( 0 )
  
 #define TRACE_5D(_e,d1,d2,d3,d4,d5)                             \
-    do {                                                       \
-        u32 _d[5];                                             \
-        _d[0]=d1;                                              \
-        _d[1]=d2;                                              \
-        _d[2]=d3;                                              \
-        _d[3]=d4;                                              \
-        _d[4]=d5;                                              \
-        trace_var(_e, 1, sizeof(*_d)*5, (unsigned char *)_d);  \
+    do {                                                        \
+        if ( unlikely(tb_init_done) )                           \
+        {                                                       \
+            u32 _d[5];                                          \
+            _d[0] = d1;                                         \
+            _d[1] = d2;                                         \
+            _d[2] = d3;                                         \
+            _d[3] = d4;                                         \
+            _d[4] = d5;                                         \
+            __trace_var(_e, 1, sizeof(*_d)*5, (unsigned char *)_d); \
+        }                                                       \
     } while ( 0 )
 
 #endif /* __XEN_TRACE_H__ */